package thread;

/**
 * 静态方法上如果使用synchronized，那么该方法一定具有同步效果
 */
public class SyncDemo3 {
    public static void main(String[] args) {
//        Thread t1 = new Thread(Boo::doSome);
//        Thread t2 = new Thread(Boo::doSome);
//        t1.start();
//        t2.start();
        //这样同步锁有效，t1,t2为同步执行

        Boo b1=new Boo();
        Boo b2=new Boo();
        Thread t1=new Thread(()->b1.doSome());
        Thread t2=new Thread(()->b2.doSome());
        t1.start();
        t2.start();
        //这样同步锁依然有效，t1,t2同步执行

        //调用静态方法是 类名.静态方法();
        //调用成员方法是 对象名.成员方法();
        //注意此处lambda表达式写法,不能用四饼
    }
}


//静态方法里没有this,只有成员方法里,this指成员
class Boo{
//    public synchronized static void doSome(){
    public static void doSome(){
        synchronized (Boo.class) { //可以用同步块，这里，引用类对象的方式：类型.class
        try {
            Thread t = Thread.currentThread();
            System.out.println(t.getName()+"：正在执行doSome方法");
            Thread.sleep(3000);
            System.out.println(t.getName()+":doSome方法执行结束");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    }
}